#include "heart_task.h"

TaskHandle_t heartHandler;  // 心跳任务句柄

/**
 *  心跳状态标志
 * 
 * 全局变量，指示系统是否正常运行：
 * - 1 = 系统正常（LED闪烁）
 * - 0 = 系统故障（LED停止闪烁）
 * 
 * 该变量由数据处理器模块(GatherDataHandlerMemory)更新
 */
int heartState = 1;  // 默认状态：正常

/**
 *  心跳任务初始化
 * 
 * 初始化心跳任务所需的外设：
 * - 配置LED指示灯（GPIO输出模式）
 */
void init_heart() {
    // 初始化LED指示灯（当前只有一个LED）
    ledInit();  // 设置LED引脚为输出模式
}

/**
 *  心跳任务主函数
 * 
 * 根据系统状态控制LED指示灯：
 * 1. 正常状态（heartState=1）：LED每2秒闪烁一次
 * 2. 故障状态（heartState=0）：LED保持关闭（不闪烁）
 * 
 * @param param 任务参数（未使用）
 */
void heart_task(void *param) {
    while (1) {
        if (heartState) {
            // 正常状态：翻转LED状态（闪烁）
            LED0 = !LED0;  // 切换LED0状态
        } else {
            // 故障状态：保持LED关闭（不闪烁）
            LED0 = 1;  // 关闭LED0（高电平熄灭）
        }
        
        // 延时2秒（2000个RTOS tick）
        vTaskDelay(2000);
    }
}

/**
 *  创建心跳任务
 * 
 * 初始化心跳任务：
 * - 任务名称: "heart_task"
 * - 栈大小: 128字（足够存储局部变量和函数调用）
 * - 优先级: 2（中等优先级，与其他任务相同）
 * 
 * 任务功能：
 * 1. 通过LED闪烁指示系统正常运行
 * 2. 在系统故障时停止闪烁（提供视觉警报）
 */
void createHeartTask() {
    xTaskCreate(
        heart_task,      // 任务主函数
        "heart_task",    // 任务名称
        128,             // 栈大小
        NULL,            // 任务参数
        2,               // 任务优先级
        &heartHandler    // 任务句柄存储位置
    );
}